/**
 * qilin-web统一封装方法
 */
import {uploadFiles,getFilesBlobData,unityUpload} from "@/api/index.js";
import {fileIp} from "@/setting.js";

/**
 * 附件上传统一封装方法--针对于qilin-element3x的无action时的附件上传
 * @param fileList  需要上传的文件列表
 * @param fileName  对应后台的传参字段名称
 * @returns 无返回值
 */
export const getUploadFileData = (fileList,fileName = "file")=>{
    // console.log(fileList,"=====");
    fileList.forEach((item)=>{
        if(!item.fileName){ //过滤未上传的文件
            let formData = new FormData();
            formData.append(fileName,item.raw);
            uploadFiles(formData).then((res)=>{
                Object.keys(res.data).forEach((key)=>{
                    item[key] = res.data[key];
                    Reflect.deleteProperty(item,"raw");
                });
            });
        }
    });
};
/**
 * 附件上传统一封装方法（5G）--针对于qilin-element3x的无action时的附件上传
 * @param fileList  需要上传的文件列表
 * @param needThumbnail 是否需要压缩，默认true
 * @param fileType 上传的文件类型--1、图片 2、视频 3、其他
 * @param fileName  对应后台的传参字段名称
 * @returns 无返回值
 */
export const unityUploadData = (fileList,needThumbnail = true,fileType = 1,fileName = "file")=>{
    // console.log(fileList);
    fileList.forEach((item)=>{
        if(!item.id){ //过滤未上传的文件
            let formData = new FormData();
            formData.append(fileName,item.raw);
            formData.append("needThumbnail",needThumbnail);
            formData.append("fileType",fileType);
            unityUpload(formData).then((res)=>{
                if(res.code == 0){
                    Object.keys(res).forEach((key)=>{
                        item[key] = res[key];
                        Reflect.deleteProperty(item,"raw");
                    });
                }else{
                    ElMessage.error({
                        message:res.msg,
                        center:true
                    });
                }
            });
        }
    });
};
/**
 * 编辑器内图片上传统一封装方法--针对于qilin-element3x的QilinKaitify组件的上传
 * @param ref //富文本编辑器元素
 * @param file //上传的文件
 * @param fileName 对应后台的传参字段名称
 * @returns 无返回值
 */
export const uploadImageData = (ref,file,fileName = "file")=>{
    let formData = new FormData();
    formData.append(fileName,file);
    uploadFiles(formData).then((res)=>{
        ref.state.editor.commands.setImage({
            src:fileIp + res.data.fileName,
            width:"300px",
            alt:"图片上传"
        });
    });
};
/**
 * 全局统一导出、下载封装方法
 * @param res 后台响应数据
 * @param fileName 文件名称，若后端给了则从后端取，无则前端自定义取名
 * @return 无返回值
 */
export const exportFileNameData=(res,fileName)=>{
    const blob = new Blob([res.data], {
        type: "application/vnd.ms-excel;charset=UTF-8",
    });
    let filename;
    if(!fileName){
        const disposition=res.headers["content-disposition"];
        const matchArray=disposition.match(/filename=(.*)/);
        filename=decodeURI(matchArray[1]);
    }else{
        filename = fileName;
    }
    // console.log(filename,"=====")
    if (window.navigator.msSaveBlob) {//没有此判断的话，ie11下的导出没有效果
        window.navigator.msSaveBlob(blob,filename);
    } else {
        var downloadElement = document.createElement("a");
        var href = window.URL.createObjectURL(blob); //创建下载的链接
        downloadElement.href = href;
        downloadElement.download = filename;
        document.body.appendChild(downloadElement);
        downloadElement.click(); //点击下载
        document.body.removeChild(downloadElement); //下载完成移除元素
        window.URL.revokeObjectURL(href); //释放掉blob对象
    };
};
/**
 * 全局统一下载文件方法封装
 * @param header 自定义请求头
 * @param responseType 响应数据类型
 * @param params 后台参数
 * @param isStream 是否直接返回文件流，默认直接返回文件流，true表示返回响应体配置项等
 * @param fileName 自定义下载文件名
 */
export const downloadFileData = (header,responseType,params,isStream,fileName)=>{
    getFilesBlobData(header,responseType,params,isStream).then((res)=>{
        if(res){
            exportFileNameData(res,fileName);
        }else{
            ElMessage.error({
                message:"下载文件失败"
            });
        }
    });
};
